// 1. 字符串的创建和基本操作
// 1.1 创建字符串
const greeting = "Hello, world!"; // 字符串字面量
const greetingObj = new String("Hello, world!"); // 使用 String 构造函数
console.log(greetingObj,'1.1');

// 1.2 获取字符串长度
const text = "Hello, world!";
console.log(text.length, '1.2'); // 输出 13

// 2. 字符串的访问
// 2.1 使用 charAt() 获取指定索引的字符
const exampleStr = "JavaScript";
console.log(exampleStr.charAt(0),'2.1'); // 输出 "J"
console.log(exampleStr.charAt(4),'2.1'); // 输出 "a"

// 2.2 使用方括号语法访问字符
const sampleStr = "JavaScript";
console.log(sampleStr[0],'2.2'); // 输出 "J"
console.log(sampleStr[4],'2.2'); // 输出 "a"

// 2.3 使用 charCodeAt() 获取字符的 Unicode 编码
const charStr = "JavaScript";
console.log(charStr.charCodeAt(0),'2.3'); // 输出 74 (J 的 Unicode 编码)
console.log(charStr.charCodeAt(4),'2.3'); // 输出 97 (a 的 Unicode 编码)

// 3. 字符串的查找
// 3.1 使用 indexOf() 查找子字符串
const searchStr = "Hello, world!";
console.log(searchStr.indexOf("world"),'3.1'); // 输出 7
console.log(searchStr.indexOf("foo"),'3.1'); // 输出 -1（未找到）
// 3.2 使用 lastIndexOf() 从末尾开始查找子字符串
const multiStr = "Hello, world! Hello again!";
console.log(multiStr.lastIndexOf("Hello"),'3.2'); // 输出 13
console.log(multiStr.lastIndexOf("world"),'3.2'); // 输出 7
// 3.3 使用 includes() 检查是否包含子字符串
const checkStr = "Hello, world!";
console.log(checkStr.includes("world"),'3.3'); // 输出 true
console.log(checkStr.includes("foo"),'3.3'); // 输出 false
// 3.4 使用 startsWith() 和 endsWith() 检查字符串的开头和结尾
const boundaryStr = "Hello, world!";
console.log(boundaryStr.startsWith("Hello"),'3.4'); // 输出 true
console.log(boundaryStr.endsWith("world!"),'3.4'); // 输出 true
// 4. 字符串的截取和分割
// 4.1 使用 slice() 截取子字符串
const sliceStr = "Hello, world!";
console.log(sliceStr.slice(0, 5),'4.1'); // 输出 "Hello"
console.log(sliceStr.slice(7),'4.1'); // 输出 "world!"
// 4.2 使用 substring() 截取子字符串
const subStr = "Hello, world!";
console.log(subStr.substring(0, 5),'4.2'); // 输出 "Hello"
console.log(subStr.substring(7),'4.2'); // 输出 "world!"
// 4.3 使用 split() 分割字符串
const splitStr = "Hello, world!";
const splitResult = splitStr.split(", "); // 使用逗号和空格作为分隔符
console.log(splitResult,'4.3'); // 输出 ["Hello", "world!"]
// 5. 字符串的拼接和替换

// 5.1 使用 concat() 拼接字符串
const strA = "Hello";
const strB = "world!";
const concatResult = strA.concat(" ", strB);
console.log(concatResult,'5.1'); // 输出 "Hello world!"
// 5.2 使用 replace() 替换字符串中的内容
const replaceStr = "Hello, world!";
const replaceResult = replaceStr.replace("world", "Kimi");
console.log(replaceResult,'5.2'); // 输出 "Hello, Kimi!"
// 5.3 使用 replaceAll() 替换字符串中的所有匹配内容
const replaceAllStr = "Hello, world! world!";
const replaceAllResult = replaceAllStr.replaceAll("world", "Kimi");
console.log(replaceAllResult,'5.3'); // 输出 "Hello, Kimi! Kimi!"
// 6. 字符串的格式化和转换
//6.1 使用 toLowerCase() 和 toUpperCase() 转换大小写
const caseStr = "Hello, world!";
console.log(caseStr.toLowerCase(),'6,1'); // 输出 "hello, world!"
console.log(caseStr.toUpperCase(),'6,1'); // 输出 "HELLO, WORLD!"
//6.2 使用 trim() 去除首尾空格
const trimStr = "   Hello, world!   ";
console.log(trimStr.trim()); // 输出 "Hello, world!"
//6.3 使用 padStart() 和 padEnd() 填充字符串
const padStr = "Hello";
console.log(padStr.padStart(10, "-")); // 输出 "-----Hello"
console.log(padStr.padEnd(10, "-")); // 输出 "Hello-----"
//6.4 使用模板字符串
const userName = "Kimi";
const templateGreeting = `Hello, ${userName}!`;
console.log(templateGreeting); // 输出 "Hello, Kimi!"
// 7. 字符串的比较
//7.1 使用 localeCompare() 比较字符串
const compareStr1 = "apple";
const compareStr2 = "banana";
console.log(compareStr1.localeCompare(compareStr2),'7.1'); // 输出 -1（compareStr1 < compareStr2）
console.log(compareStr2.localeCompare(compareStr1),'7.1'); // 输出 1（compareStr2 > compareStr1）
//8. 字符串的编码和解码
// 8.1 使用 encodeURI() 和 decodeURI()
const encodeStr = "Hello, world!";
const encodedStr = encodeURI(encodeStr); // 输出 "Hello%2C%20world%21"
const decodedStr = decodeURI(encodedStr); // 输出 "Hello, world!"
console.log(encodedStr,'8.1');
console.log(decodedStr,'8.1');

//8.2 使用 encodeURIComponent() 和 decodeURIComponent()
const encodeComponentStr = "Hello, world!";
const encodedComponentStr = encodeURIComponent(encodeComponentStr); // 输出 "Hello%2C%20world%21"
const decodedComponentStr = decodeURIComponent(encodedComponentStr); // 输出 "Hello, world!"
console.log(encodedComponentStr,'8.2');
console.log(decodedComponentStr,'8.2');
